package com.jeesite.modules.digitalize.controller;


import com.baomidou.mybatisplus.extension.api.ApiController;
import com.jeesite.modules.digitalize.entity.dto.IdDto;
import com.jeesite.modules.digitalize.entity.dto.component.ComponentAddDto;
import com.jeesite.modules.digitalize.entity.dto.resource.ResourceDelDto;
import com.jeesite.modules.digitalize.entity.dto.resource.ResourceMoveDto;
import com.jeesite.modules.digitalize.entity.vo.component.ComponentVersionVo;
import com.jeesite.modules.digitalize.entity.vo.component.ConponentsVo;
import com.jeesite.modules.digitalize.service.DigitalizeComponentService;
import com.jeesite.modules.digitalize.service.DigitalizeComponentVersionService;
import com.jeesite.modules.digitalize.util.response.ResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;


@RestController
@Api(tags = "数字-BIM模型&图纸文件 相关功能")
@RequestMapping("${adminPath}/digitalize/component")
public class DigitalizeComponentController extends ApiController {
    /**
     * 服务对象
     */
    @Resource
    private DigitalizeComponentService digitalizeComponentService;

    @Resource
    private DigitalizeComponentVersionService digitalizeComponentVersionService;


    /**
     * @date 2024年01月03日 15:04:53
     * @author patronli
     * @Description: 新建文件夹、上传文件 BIM模型&图纸文件
     */
    @ApiOperation("创建文件夹、上传文件 BIM模型&图纸文件")
    @PostMapping("add")
    public ResultVo addFloder(@Validated @RequestBody ComponentAddDto dto) {
        return digitalizeComponentService.addFloder(dto);
    }


    /**
     * @date 2024年01月03日 15:10:10
     * @author patronli
     * @Description: 文件列表 BIM模型&图纸文件
     */
    @ApiOperation("文件列表 BIM模型&图纸文件")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "projectCode", value = "项目id", required = true),
            @ApiImplicitParam(name = "fileSource", value = "BIM模型列表这里传递 0，图纸列表这里传递1", required = true),
            @ApiImplicitParam(name = "fileName", value = "文件名称", required = false),
    })
    @GetMapping("files")
    public ResultVo<List<ConponentsVo>> files(@RequestParam(required = true) String projectCode, Integer fileSource, String fileName) {
        return digitalizeComponentService.files(projectCode, fileSource, fileName);
    }

    /**
     * @date 2024年01月04日 15:01:24
     * @author patronli
     * @Description: 删除版本
     */
    @ApiOperation("BIM模型&图纸文件 删除版本")
    @PostMapping("delVersion")
    public ResultVo delVersion(@Validated @RequestBody IdDto dto) {
        return digitalizeComponentService.delVersion(dto);
    }


    /**
     * @date 2024年01月04日 14:22:31
     * @author patronli
     * @Description: 转换 将状态更新为转换中
     */
    @ApiOperation("BIM模型&图纸文件 转换状态 未转换->转换中（前台调用）")
    @PostMapping("converting")
    public ResultVo converting(@Validated @RequestBody ResourceDelDto dto) {
        return digitalizeComponentService.converting(dto);
    }

    /**
     * @date 2024年01月04日 17:31:49
     * @author patronli
     * @Description: 更新状态为成功 或者失败（ BImface回调） TODO
     */


    /**
     * @date 2024年01月03日 15:11:47
     * @author patronli
     * @Description: 移动 BIM模型&图纸文件
     */
    @ApiOperation("移动 BIM模型&图纸文件")
    @PostMapping("moveFile")
    public ResultVo moveFile(@Validated @RequestBody ResourceMoveDto dto) {
        return digitalizeComponentService.moveFile(dto);
    }


    /**
     * @date 2024年01月03日 15:11:47
     * @author patronli
     * @Description: 删除 包含子层级 BIM模型&图纸文件
     */
    @ApiOperation("删除文件/文件夹名字 包含子层级 BIM模型&图纸文件")
    @PostMapping("delFile")
    public ResultVo delFile(@Validated @RequestBody ResourceDelDto dto) {
        return digitalizeComponentService.delFile(dto);
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @ApiOperation("根据模型id查询全部模型版本信息")
    @GetMapping("getAllVersions/{id}")
    public ResultVo<List<ComponentVersionVo>> getAllVersions(@PathVariable Integer id) {
        return ResultVo.success(digitalizeComponentVersionService.getAllVersions(id));
    }

}

